#include <iostream>
using namespace std;

class AbstractCaculator {
public:
	virtual int getResult() = 0;
};

class AbstractDualOperandCalculator : public AbstractCaculator {
public:
	int m_op1;
	int m_op2;
public:
	void setOperands(int op1, int op2)
	{
		this->m_op1 = op1;
		this->m_op2 = op2;
	}
};

class AddCalculator : public AbstractDualOperandCalculator {
public:
	int getResult()
	{
		return m_op1 + m_op2;
	}
};

class SubCalculator : public AbstractDualOperandCalculator {
public:
	int getResult()
	{
		return m_op1 - m_op2;
	}
};

class MulCalculator : public AbstractDualOperandCalculator {
public:
	int getResult()
	{
		return m_op1 * m_op2;
	}
};

class DivCalculator : public AbstractDualOperandCalculator {
public:
	int getResult()
	{
		return m_op1 / m_op2;
	}
};



int main()
{
	AddCalculator* caculator = new AddCalculator;
	caculator->setOperands(10, 5);
	cout << "AddCalculator:  " << caculator->getResult() << endl;

	return 0;
}